package com.ljf.framework.router;

import com.ljf.framework.LjfManager;
import com.ljf.framework.fun.LjfParamFunction;

import java.util.List;

/**
 * 说明：路由匹配器
 *
 * @Auther: lijinfeng
 * @Date: 2024/4/22
 */
public class LjfRouter {



    private boolean isMatch;

    public boolean isContinueMatch() {
        return ! isMatch;
    }

    public LjfRouter(){
        this.isMatch = true;
    }

    /**
     * 路由匹配
     * @param pattern 路由匹配符
     * @param path 被匹配的路由
     * @return 是否匹配成功
     */
    public boolean isMatch(String pattern, String path) {
        return LjfManager.getLjfContextOrSecond().matchPath(pattern, path);
    }

    /**
     * 路由匹配
     * @param patterns 路由匹配符集合
     * @param path 被匹配的路由
     * @return 是否匹配成功
     */
    public boolean isMatch(List<String> patterns, String path) {
        if(patterns == null) {
            return false;
        }
        for (String pattern : patterns) {
            if(isMatch(pattern, path)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 路由匹配
     * @param patterns 路由匹配符数组
     * @param path 被匹配的路由
     * @return 是否匹配成功
     */
    public boolean isMatch(String[] patterns, String path) {
        if(patterns == null) {
            return false;
        }
        for (String pattern : patterns) {
            if(isMatch(pattern, path)) {
                return true;
            }
        }
        return false;
    }

    // ------ 使用当前URI匹配

    /**
     * 路由匹配 (使用当前URI)
     * @param pattern 路由匹配符
     * @return 是否匹配成功
     */
    public boolean isMatchCurrURI(String pattern) {
        return isMatch(pattern, LjfManager.getLjfContext().getRequest().getRequestPath());
    }

    /**
     * 路由匹配 (使用当前URI)
     * @param patterns 路由匹配符集合
     * @return 是否匹配成功
     */
    public boolean isMatchCurrURI(List<String> patterns) {
        return isMatch(patterns, LjfManager.getLjfContext().getRequest().getRequestPath());
    }

    /**
     * 路由匹配 (使用当前URI)
     * @param patterns 路由匹配符数组
     * @return 是否匹配成功
     */
    public boolean isMatchCurrURI(String[] patterns) {
        return isMatch(patterns, LjfManager.getLjfContext().getRequest().getRequestPath());
    }

    public LjfRouter match(List<String> includeList) {
        if (isMatch){
            if (isMatchCurrURI(includeList)) {
                return this;
            }
            isMatch = false;
        }
        return this;
    }

    public LjfRouter notMatch(List<String> excludeList) {
        if (isMatch){
            if (!isMatchCurrURI(excludeList)) {
                return this;
            }
            isMatch = false;
        }
        return this;
    }

    public LjfRouter check(LjfParamFunction<LjfRouter> fun){
        if(isMatch)  {
            fun.run(this);
        }
        return this;
    }
}
